<?php
require_once 'app.config.php';
/**
 * 类表：所有表的抽象类
 */
class MysqlTable {

  protected $table='tableName'; //表名
  protected $fields = array('id');//字段名
  protected $db; //数据库对象
  protected $query=null; //查询资源对象
  private   $debug = 1;
  private   $errormsg=null;

  /**
   * @desc  构造函数
   */
  public function __construct(){
	$this->db = MysqlDB::getInstance();
  }
  /**
   * @desc  获得当前数据库
   */
  public function getAdapter(){
  	return $this->db;
  }
  /**
   * @desc   查询方法
   *
   * @param String $where    查询条件，需经过$db->quoteInto处理
   * @param String $orderby  排序字段名 缺省为主键,如id
   * @param String $desc     排序方式 'desc'or'asc'
   * @param String $limit    获取记录条数
   * @param String $type     mysql_query  or   mysql_unbuffered_query
   */
  public function select($where,$orderby=null,$desc='desc',$limit=null,$select=null,$type = '') {
  		$select?$cols=$this->db->escape($select):$cols = implode(',',$this->fields);
  		($orderby==null)?$orderby = $this->db->get_primary($this->table):null;
  		$orderby = $this->db->escape($orderby);
  		($desc=='desc')?null:$desc='asc';
  		if($limit){
  			$limit = explode(',',$limit);
	  		$limit = $this->db->escape($limit);
	  		$limit = implode(',',$limit);
  		}
		$sql = "select $cols  from {$this->table} where $where order by $orderby $desc";
		$limit?$sql.=" limit $limit":null;
		$this->query = $this->db->query($sql,$type);
		return  $this;
  }
  /**
   * @desc   按条返回当前查询结果
   *
   * @param String $result_type   返回结果的形式   缺省按字段索引
   */
  public function fetch_array($result_type = MYSQL_ASSOC){
  	return $this->db->fetch_array($this->query,$result_type);
  }
  /**
   * @desc   按条返回当前查询结果
   *
   * @param String $result_type   结果的形式   缺省按字段索引
   */
  public function fetchAll($result_type = MYSQL_ASSOC){
  	$rows = array();
	while($row = $this->db->fetch_array($this->query,$result_type)){
		$rows[] = $row;
	}
	return $rows;
  }
  /**
   * @desc   插入一条记录
   *
   * @param array $record   数组形式
   */
  public function insert(array $record) {

  	$this->db->insert($this->table,$record);
  	return $this->db->insert_id();
  }
  /**
   * @desc   更新记录
   *
   * @param array   $record   数组形式
   * @param string  $where    更新条件，需经过$db->quoteInto处理
   */
  public function update($array, $where = ''){
	$this->db->update($this->table,$array,$where);
	return $this->db->affected_rows();
  }
  /**
   * @desc   删除记录
   *
   * @param string  $where    删除条件，需经过$db->quoteInto处理
   */
  public function delete($where){
	$this->db->delete($this->table,$where);
	return $this->db->affected_rows();
  }
  /**
   * @desc   按某一字段查询
   *
   * @param array  $options  名、值对          array('字段名'=>值)
   * @param String $options  值                缺省字段名id
   * @param String $op       比较符号          'eq':等于;'lt':小于;'gt':大于 'like':相似
   */
  public function getBy($options,$op='eq',$limit=null,$orderby=null) {
	if(is_array($options)){
		foreach($options as $k=>$val) break;
	}else{
		$k = 'id';
		$val = $options;
	}
	is_string($val)?$val="'".$this->db->escape(trim($val))."'":null;
	$op = str_replace('gt','>',str_replace('lt','<',str_replace('eq','=',$op)));
	$cols = implode(',',$this->fields);
	$sql = "select $cols from {$this->table} where $k $op $val";
	$orderby?$sql.=" order by $orderby":null;
	$limit?$sql.=" limit $limit":null;
	$this->query = $this->db->query($sql);
	return $this;
  }
  /**
   * @desc   返回查询记录数
   */
  public function num_rows(){
  	if($this->query)return $this->db->num_rows($this->query);
  	return 0;
   }
  /**
   * @desc   按某一字段删除
   *
   * @param array   $options   名、值对          array('字段名'=>值)
   * @param string  $options   值                缺省字段名id
   * @param String  $op        比较符号          'eq':等于;'lt':小于;'gt':大于 'like':相似
   */
  public function delBy($options,$op='eq') {
	if(is_array($options)){
		foreach($options as $k=>$val) break;
	}else{
		$k = 'id';
		$val = $options;
	}
	is_string($val)?$val="'".$this->db->escape(trim($val))."'":null;
	$op = str_replace('gt','>',str_replace('lt','<',str_replace('eq','=',$op)));
	$where ="$k $op $val";
	$this->db->delete($this->table,$where);
	return $this->db->affected_rows();
  }
   /**
    * @desc 返回出错调试信息
    *
    * @param  $message
    * @param  $sql
    */
	function message($message = '', $sql = '')
	{
		$this->db->message($message,$sql);
	}
}

?>